package com.fh.shop.api.cate.biz;

import com.alibaba.fastjson.JSON;
import com.fh.shop.api.cate.po.Cate;
import com.fh.shop.util.ServerResponse;
import com.fh.shop.util.RedisUtil;
import com.fh.shop.api.cate.mapper.ICateMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service("cateService")
@Slf4j
public class ICateServiceImpl implements ICateService {
    @Resource
    private ICateMapper cateMapper;

    @Override
    public ServerResponse findList() {
        //每次先根据key获取redis缓存中的值 看是否还需要访问数据库
        String cateListJson = RedisUtil.get("cateList");
        if (StringUtils.isNotEmpty(cateListJson)){

            //返回值需要一个java对象数组 所以将cateListJson转换为java对象数组
            List<Cate> cateListJava = JSON.parseArray(cateListJson, Cate.class);

            log.debug("在缓存中取数据");

            //不为空说明redis有值 直接返回数据
            return ServerResponse.success(cateListJava);
        }
        log.debug("在数据库取数据");
        //否则说明没有值 需要去数据库中取值
        List<Cate> cateList = cateMapper.selectList(null);
        //redis中无法放入java对象（如list）,所以通过第三方工具fastjson转为json格式的字符串
        String cateJson = JSON.toJSONString(cateList);
        //取值后放入redis缓存中,方便再次使用
        RedisUtil.set("cateList",cateJson);
        //取值后返回数据
        return ServerResponse.success(cateList);
    }
}
